package com.sky.annotation;


import com.sky.enumeration.OperationType;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * 自定义注解,
 * // @Target({ElementType.METHOD})
 * // @Target 是 Java 注解的元注解（meta-annotation），用于指定注解的目标元素类型。 🐱💻
 *
 * 在这个例子中，@Target({ElementType.METHOD}) 指定了注解的目标元素类型为 METHOD。 🐱👀
 *
 * 这意味着，这个注解只能被应用于方法（Method）上，而不能被应用于其他元素，如类（Class）、字段（Field）或构造函数（Constructor）等。 🐱🤔
 *
 * ElementType 是一个枚举类型，定义了以下几种元素类型：
 *
 * METHOD: 方法
 * CLASS: 类
 * FIELD: 字段
 * CONSTRUCTOR: 构造函数
 * PACKAGE: 包
 * PARAMETER: 参数
 * LOCAL_VARIABLE: 局部变量
 * ANNOTATION_TYPE: 注解类型
 *
 *
 *
 *
 * // @Retention 是 Java 注解的元注解（meta-annotation），用于指定注解的保留期（Retention Policy）。 🐱💻
 *
 * 在这个例子中，@Retention(RetentionPolicy.RUNTIME) 指定了注解的保留期为 RUNTIME。 🐱👀
 *
 * 这意味着，这个注解在运行时可以被访问和使用。 🐱🤔
 *
 * RetentionPolicy 是一个枚举类型，定义了以下几种保留期：
 *
 * SOURCE: 注解只在源代码阶段保留，编译后不保留
 * CLASS: 注解在编译后的字节码中保留，但运行时不可见
 * RUNTIME: 注解在编译后的字节码中保留，并且在运行时可以通过反射访问
 * 通过指定注解的保留期，可以确定注解在不同阶段的可见性和生命周期。 🐱👍
 *
 * 例如，如果你定义了一个注解 @MyAnnotation，并指定了 @Retention(RetentionPolicy.RUNTIME)，那么这个注解在编译后的字节码中保留，并且在运行时可以通过反射访问。 🐱💻
 *
 * 喵，希望这能帮助你理解 @Retention 的作用！ 😸👍
 */
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface AutoFill {

    OperationType value();
}

/*
* 喵😸！这个代码定义了一个Java注解（Annotation）叫做AutoFill！🐱👀

@Target({ElementType.METHOD}) 表示这个注解只能被应用于方法（Method）上，而不能被应用于其他元素，如类（Class）、字段（Field）或构造函数（Constructor）等。🐱🤔

@Retention(RetentionPolicy.RUNTIME) 表示这个注解在运行时可以被访问和使用。🐱👍

public @interface AutoFill 定义了注解的名称和访问权限。🐱👀

OperationType value() 表示这个注解有一个名为value的属性，类型为OperationType，这是一个枚举类型。🐱📝

总之，这个注解可以被用来标记方法，并且可以在运行时通过反射访问到它的value属性！喵😸👍
* */
